package com.itheima.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 *@ControllerAdvice : 指定拦截那些类型的控制器;
 *@ResponseBody: 将方法的返回值 R 对象转换为json格式的数据, 响应给页面;
 *@RestControllerAdvice 上述两个合并
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    //@ExceptionHandler指定拦截的是哪一种异常   数据库唯一约束错误，添加了同样的用户
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
        //获得报错信息前连个单词Duplicate entry判断是否为这个错误
        //Duplicate entry '？' for key 'idx_username'
        if(ex.getMessage().contains("Duplicate entry")){
            //将报错信息分割
            String[] split=ex.getMessage().split(" ");
            String msg=split[2]+"已存在";
            //返回用户名+“已存在”
            return R.error(msg);
        }
        //如果不是这个指定报错信息提示位置错误
        return R.error("未知错误");
    }

    //指定CustomException异常时拦截
    @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException ex){
        log.error(ex.getMessage());
        return R.error(ex.getMessage());
    }

}
